const config = require('./config/config.js');
const AppError = require('./framework/core/app_error.js');
const timeUtil = require('./framework/helpers/time_util.js');
const routes = [];

// 初始化
async function initApp(context) {
	console.log('云函数初始化开始 ver=' + config.VER);

	try {
		// 设置当前环境
		config.CUR_ENV = context.environment.ENV || 'test';
		console.log('当前环境=', config.CUR_ENV);

		if (context && context.tencentContext) {
			config.CLOUD_ID = context.tencentContext.namespace;
			console.log('当前云环境=', config.CLOUD_ID);
		}

		// 初始化OA
		if (config.IS_OA) {
			console.log('OA初始化开始');
			const oaInit = require('./project/oa/init/init.js');
			await oaInit.initApp();
			console.log('OA初始化完成');
		}
		
		// 初始化PLM项目
		if (config.IS_PLM) {
			console.log('PLM项目初始化开始');
			// 导入PLM初始化模块
			const plmInit = require('./project/plm/init/index.js');
			await plmInit.initApp();
			console.log('PLM项目初始化完成');
		}

		console.log('云函数初始化完成 ver=' + config.VER);
	} catch (error) {
		console.error('云函数初始化错误：', error);
	}
}

// 路由中心
async function router(event, context) {
	console.log('EVENT内容:', event);

	// 忽略 context 中的 callbackWaitsForEmptyEventLoop，避免过多信息
	const { callbackWaitsForEmptyEventLoop, ...contextWithoutCallback } = context;
	console.log('CONTEXT内容:', contextWithoutCallback);

	let startTime = timeUtil.time();
	let timeTake = 0;

	try {
		console.log('▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤');
		let route = event.route || event.path; // 可处理HTTP请求和云函数直接请求
		if (!route) {
			console.error('未指定路由!');
			return { code: -1, msg: '未指定路由' };
		}

		// PID 处理
		let pid = '';
		if (event.params && event.params.PID) {
			pid = event.params.PID;
			console.log('使用params中指定的PID=' + pid);
		} else if (event.PID) {
			pid = event.PID;
			console.log('使用event中指定的PID=' + pid);
		} else {
			console.log('未指定PID，使用系统默认PID');
		}

		// 设置全局PID
		global.PID = pid;

		// 路由
		const appRouter = require('./framework/core/app_router.js');
		const routes = require('./routes.js');
		
		const result = await appRouter.router({
			routes,
			event,
			context
		});

		timeTake = timeUtil.time() - startTime;
		console.log('Controller Return Result = ', result);
		console.log(`耗时 ${timeTake}ms`);
		return result;

	} catch (error) {
		console.error(error);
		timeTake = timeUtil.time() - startTime;
		console.log(`耗时 ${timeTake}ms`);

		// 处理错误
		if (error instanceof AppError) {
			return {
				code: error.code,
				msg: error.message
			};
		} else {
			return {
				code: -1,
				msg: '系统错误: ' + (error.message ? error.message : error)
			};
		}
	}
}

// 云函数入口
exports.main = async (event, context) => {
	// 初始化
	await initApp(context);

	// 路由
	return await router(event, context);
}; 